package com.yuandian.api.management.entity;


import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yuandian.api.management.validate.InsertFlag;
import com.yuandian.api.management.validate.UpdateFlag;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

/**
 * 服务资源表-实体
 * @author zfsn
 * @date 2023-3-17
 */
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "服务资源表", description = "")
@TableName("conf_resource")
public class ConfResource extends BasePage<ConfResource> {

	/**
	 * 主键，唯一标识数据
	 */
	@ApiModelProperty(value = "主键", notes = "主键，唯一标识数据")
	@TableId(type = IdType.AUTO)
	private Integer id;

	/**
	 * 所属系统id
	 */
	@ApiModelProperty(value = "所属系统id", notes = "所属系统id")
	private Integer systemId;

	/**
	 * 服务资源编码
	 */
	@ApiModelProperty(value = "服务资源编码", notes = "服务资源编码")
	private String resourceCode;

	/**
	 * 服务资源名称，规则：应用层协议+业务服务+资源ID
	 */
	@ApiModelProperty(value = "服务资源名称", notes = "服务资源名称，规则：应用层协议+业务服务+资源ID")
	private String name;

	/**
	 * 资源类型，0：非首端服务资源(默认)、1：关键加载项服务资源、2:步骤服务资源
	 */
	@ApiModelProperty(value = "资源类型", notes = "资源类型，0：非首端服务资源(默认)、1：关键加载项服务资源、2:步骤服务资源")
	@NotNull(message = "资源类型type 不能为空", groups = {InsertFlag.class, UpdateFlag.class})
	private Integer type;

	/**
	 * 是否确认，0：否(默认)、1：是
	 */
	@ApiModelProperty(value = "是否确认", notes = "是否确认，0：否(默认)、1：是")
	private Integer isConfirm;

	/**
	 * 识别类型，1：url、2：api、3：sql
	 */
	@ApiModelProperty(value = "识别类型", notes = "识别类型，1：url、2：api、3：sql")
	@NotNull(message = "识别类型identifyType 不能为空", groups = {InsertFlag.class, UpdateFlag.class})
	private Integer identifyType;

	/**
	 * 识别串
	 */
	@ApiModelProperty(value = "识别串", notes = "识别串")
	@NotBlank(message = "识别串identifyStr 不能为空", groups = {InsertFlag.class, UpdateFlag.class})
	private String identifyStr;

	/**
	 * 协议编码
	 */
	@ApiModelProperty(value = "协议编码", notes = "协议编码")
	@NotBlank(message = "协议编码protocolCode 不能为空", groups = {InsertFlag.class, UpdateFlag.class})
	private String protocolCode;

	/**
	 * 协议类型
	 */
	@ApiModelProperty(value = "协议类型", notes = "协议类型")
	@NotBlank(message = "协议类型protocolType 不能为空", groups = {InsertFlag.class, UpdateFlag.class})
	private String protocolType;

	/**
	 * 父服务资源编码
	 */
	@ApiModelProperty(value = "父服务资源编码", notes = "父服务资源编码")
	private String parentResourceCode;

	/**
	 * 基础编码
	 */
	@ApiModelProperty(value = "基础编码", notes = "基础编码")
	private String baseCode;

	/**
	 * 资源状态。
	 0：未存入未确认服务资源表
	 其它代表已存入，下面是不同数据代表的意义。
	 Url不符合要求:
	 10：Url为空
	 11：Url去除问号后为空
	 12：Url去除问号后Url去除问号后长度超过512。
	 15：Url不以“http://”或者“https://”或者“/”开头
	 16：Url的“http://”或者“https://”之后为空
	 过滤规则过滤:
	 20：Url被过滤规则过滤
	 黑名单过滤:
	 30：Url被服务资源黑名单(从原始Url确认的Url)过滤
	 35：Url被服务资源黑名单(从前缀url确认的Url)过滤
	 已确认资源过滤:
	 40：Url与从原始Url确认的Url相同
	 42：Url发现为已确认资源(从原始Url确认的Url)
	 45：Url与从前缀Url确认的Url相同
	 48：Url发现为已确认资源(从前缀Url确认的Url)
	 未确认资源过滤:
	 50：Url与未确认资源的原始Url相同。
	 55：Url发现为未确认资源''。
	 */
	@ApiModelProperty(value = "资源状态", notes = "资源状态。0：未存入未确认服务资源表 其它代表已存入，下面是不同数据代表的意义。")
	private Integer status;

	/**
	 * 显示顺序
	*/
	@ApiModelProperty(value = "显示顺序", notes = "显示顺序")
	private Integer sequence;

	/**
	 * 创建人
	*/
	@ApiModelProperty(value = "创建人", notes = "创建人")
	private String createBy;

	/**
	 * 创建时间
	*/
	@ApiModelProperty(value = "创建时间", notes = "创建时间")
	private LocalDateTime createTime;

	/**
	 * 更新人
	*/
	@ApiModelProperty(value = "更新人", notes = "更新人")
	private String updateBy;

	/**
	 * 更新时间
	*/
	@ApiModelProperty(value = "更新时间", notes = "更新时间")
	private LocalDateTime updateTime;

	/**
	 * 是否逻辑删除，0：否、1：是
	*/
	@ApiModelProperty(value = "是否逻辑删除", notes = "是否逻辑删除，0：否、1：是")
	private Integer isDel;

	/**
	 * 备注
	*/
	@ApiModelProperty(value = "备注", notes = "备注")
	private String remarks;

	@TableField(exist = false)
	@ApiModelProperty(value = "key", notes = "")
	private String key;

	@TableField(exist = false)
	@ApiModelProperty(value = "关键字", notes = "关键字")
	private String keyword;

	/**
	 * 关键字
	 */
	@TableField(exist = false)
	private List<ConfKeyword> keys = new ArrayList<>();

	/**
	 * 专属指标
	 */
	@TableField(exist = false)
	private List<ConfExclusiveIndicator> ind = new ArrayList<>();

	/**
	 * 对象集合
	 */
	@TableField(exist = false)
	private List<ConfDecrypt> aed =new ArrayList<>();

	/**
	 * //协议编码
	 */
	@TableField(exist = false)
	private String agreementResourceCode;
}